/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.madmac.pessoa;

import org.madmac.exception.ConnectionFailedException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.wakeful.conn.Connection;

/**
 *
 * @author suporte
 */
public class PessoaDao {

	private static PessoaDao instance;

	private PessoaDao() {
	}

	public static PessoaDao getInstance() {

		if (instance == null) {
			instance = new PessoaDao();
		}

		return instance;
	}

	public Pessoa selectByNome(String nome) throws SQLException, ClassNotFoundException, Exception {

		Pessoa pessoa = null;
		java.sql.Connection conn = Connection.getInstance();
		String sql = "SELECT id_pessoa FROM madmac.pessoa WHERE nome = UPPER(?)";
		PreparedStatement pstmt = conn.prepareStatement(sql);
		pstmt.setString(1, nome);

		ResultSet rs = null;
		try {
			rs = pstmt.executeQuery();

			if (rs.next()) {
				pessoa = new Pessoa();
				pessoa.setIdPessoa(rs.getInt("id_pessoa"));
			}
		} catch (Exception e) {
			throw new ConnectionFailedException("A conexão precisa ser reiniciada.");
		} finally {
			pstmt.close();
			if (rs != null) {
				rs.close();
			}
		}
		return pessoa;
	}

	public List<Pessoa> selectByNomeLike(String search_nome) throws SQLException, ClassNotFoundException, Exception {

		List<Pessoa> lista = new ArrayList<Pessoa>();

		java.sql.Connection conn = Connection.getInstance();
		Statement stmt = conn.createStatement();

		String sql = "SELECT nome FROM madmac.pessoa WHERE nome LIKE (SELECT UPPER('" + search_nome + "%'))";
		sql += "ORDER BY nome ";

		ResultSet rs = null;
		try {
			rs = stmt.executeQuery(sql);
		} catch (Exception e) {
			throw new ConnectionFailedException("A conexão precisa ser reiniciada.");
		}

		while (rs.next()) {

			Pessoa pessoa = new Pessoa();

			String nome = rs.getString("nome");

			pessoa.setNome(nome);

			lista.add(pessoa);
		}

		return lista;
	}

	public List<Pessoa> selectByNomeLike2(String search_nome) throws SQLException, ClassNotFoundException, Exception {

		List<Pessoa> lista = new ArrayList<Pessoa>();

		java.sql.Connection conn = Connection.getInstance();
		Statement stmt = conn.createStatement();

		String sql = "SELECT up.nome FROM unify.pessoas up, unify.usuarios uu ";
		sql += "WHERE uu.code_pessoa = up.code_pessoa ";
		sql += "AND up.nome LIKE (SELECT UPPER('" + search_nome + "%')) ";

		ResultSet rs = null;
		try {
			rs = stmt.executeQuery(sql);
		} catch (Exception e) {
			throw new ConnectionFailedException("A conexão precisa ser reiniciada.");
		}

		while (rs.next()) {

			Pessoa pessoa = new Pessoa();

			String nome = rs.getString("nome");

			pessoa.setNome(nome);

			lista.add(pessoa);
		}

		return lista;
	}

   public Object create (Pessoa pessoa) throws Exception {
      Integer id = null;
      PreparedStatement pstmt = null;
      ResultSet rs = null;
      try {
         java.sql.Connection conn = Connection.getInstance();
         pstmt = conn.prepareStatement(PessoaQuery.create());
         pstmt.setString(1, pessoa.getNome());
         rs = pstmt.executeQuery();
         if (rs.next()) {
            id = rs.getInt("id_pessoa");
         }
      } catch (Exception e) {
         throw new Exception(e);
      } finally {
         if (pstmt != null) {
            pstmt.close();
         }
         if (rs != null) {
            rs.close();
         }
      }
      return id;
   }
}
